#pragma once
#include "include/nlohmann/json.hpp"
#include <deque>
#include <iostream>
#include <unordered_set>

namespace BilMsg
{
	// 用户消息
	class UserMesg
	{
	public:
		std::string text;		// 用户文本消息
		long long uid;			// 用户UID
		std::string nickname;	// 用户名称
		std::string timeline;	// 消息发送的时间线
		int isadmin = 0;		// 管理员权限状态
		std::string onlyUid;	// 唯一识别uid

		UserMesg(const nlohmann::json&);

		// 获取JSON对象
		nlohmann::json getJson() const;
	};

	// 消息事件管理器
	class MsgManager
	{
	private:
		std::unordered_set<std::string> msgCacheSet;
		std::deque<std::string> msgCache;
		unsigned int maxCacheCount = 0;
	public:
		MsgManager(unsigned int maxCacheCount = 300);

		void loadMsg(const UserMesg& msg);

		bool hasMsg(const UserMesg& msg) const;

		void addMsg(const UserMesg& msg);

		void freeLastMsg();

		void updateMsg(const UserMesg& msg);
	};
}